Quando declarada dentro de uma estrutura de repetição ou condicional a variável com let não pode ser acessada fora, com var sim.
Isso acontece porque a variável declarada com let pertence ao bloco em que foi inserida.
Os blocos em javascript são estruturas condicionais como: if, ou switch case, ou de repetição como for e while.
Já a variável declarada com var não considera o bloco, então após ele ser usada em um for ou if ela pode ser usada com o último estado após ser executada a estrutura de repetição ou condicional.
Isso independe da variável ser global ou local, ou seja ser declarada fora de uma função ou dentro.